package SemanticSpace.words.tools;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;

/**
 *
 * @author 郝国生
 * 功能：对rs中的信息进行处理，可从本类中获得存放id的List和存放id的Set
 */
public class WordIdSuper {

    HashMap result = new HashMap();

    /**
     * 把表中的一些信息放在内存中，不用每次再访问数据库，而且释放了连接资源，缺点是内存消耗较大
     * @param rs 词汇信息包含在rs中
     * @throws SQLException
     */
    public WordIdSuper(ResultSet rs, int type) throws SQLException {
        rs.beforeFirst();
        result.clear();
        switch (type) {
            case 0: {//rs的中每条记录的形式是id,vector,此时result的类型是HashMap<Integer,HashMap<Integer,Integer>>
                //第1个Integer是词汇的Id,第二个Integer是解释中的词汇的Id,第三个Integer是解释中与第2个Integer对应的词汇出现的次数
                while (rs.next()) {//遍历rs
                    if (null != rs.getString("vector") && !rs.getString("vector").equals("")) {
                        //System.out.println(rs.getString("vector"));
                        String[] vectorEx = rs.getString("vector").split(",");
                        HashMap<Integer, Integer> vectorMap = new HashMap<Integer, Integer>();//把vector中的内容放在Map中
                        if (vectorEx.length > 0) {
                            for (int i = 0; i < vectorEx.length; i++) {
                                vectorMap.put(Integer.parseInt(vectorEx[i].substring(0, vectorEx[i].indexOf("_"))), Integer.parseInt(vectorEx[i].substring(vectorEx[i].indexOf("_") + 1)));
                            }
                        }
                        result.put(rs.getInt("id"), vectorMap);
                    } else {
                        result.put(rs.getInt("id"), new HashMap<Integer, Integer>());
                    }
                }
            }
            break;
            case 1: {//rs的中每条记录的形式是id,word,此时result的类型是HashMap<Integer,String>
                //第1个Integer是词汇的Id,第二个String是word
                while (rs.next()) {//遍历rs
                    result.put(rs.getInt("id"), rs.getString("word"));
                }
            }
            break;
            case 2: {//rs的中每条记录的形式是id,word,此时result的类型是HashMap<Integer,String>
                //第1个Integer是词汇的Id,第二个String是解释+"#"+示例
                while (rs.next()) {//遍历rs
                    result.put(rs.getInt("id"), rs.getString("explanation"));
                }
            }
            break;
            case 3: {//rs的中每条记录的形式是id,vector,但是vector只有一条解释，此时result的类型是HashMap<Integer,String>
                //第1个Integer是词汇的Id,第二个String也是id
                while (rs.next()) {//遍历rs
                    result.put(rs.getInt("id"), rs.getString("vector"));
                }
            }
            break;
            case 4: {//rs的中每条记录的形式是id,word,此时result的类型是HashMap<String,Integer>
                //第一个String是word,第二个Integer是词汇的Id
                while (rs.next()) {//遍历rs
                    result.put(rs.getString("word"), rs.getInt("id"));
                }
            }
            break;
            case 5: {//rs的中每条记录的形式是id,dist,此时result的类型是HashMap<Integer,String>
                //第一个Integer是词汇的Id，第二个String是dist,
                while (rs.next()) {//遍历rs
                    result.put(rs.getInt("id"), rs.getString("dist"));
                }
            }
            break;
        }
    }

    public HashMap getHashMap() throws SQLException {
        return result;
    }

    public HashSet<Integer> getIdSet() throws SQLException {
        HashSet<Integer> result1 = new HashSet<Integer>();
        Iterator<Entry<Integer, Object>> it = result.entrySet().iterator();
        while (it.hasNext()) {
            Entry<Integer, Object> a = it.next();
            result1.add(a.getKey());
        }
        return result1;
    }

    public List<Integer> getIdList() throws SQLException {
        List<Integer> result1 = new ArrayList<Integer>();
        Iterator<Entry<Integer, Object>> it = result.entrySet().iterator();
        while (it.hasNext()) {
            Entry<Integer, Object> a = it.next();
            result1.add(a.getKey());
        }
        return result1;
    }

    public List<String> getStringList() {
        List<String> wordList = new ArrayList<String>();
        Iterator<Entry<Integer, String>> it = result.entrySet().iterator();
        while (it.hasNext()) {
            wordList.add(it.next().getValue());
        }
        return wordList;
    }
}
